/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Servlets;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.*;
import javax.servlet.http.*;

import com.akcess.vo.*;
import com.akcess.exception.*;
import manejadores.*;
import java.util.*;
import java.sql.*;

/**
 *
 * @author Ramon
 */
public class GestionarTipos_de_Recursos extends HttpServlet {

    private static final String dirBASE = "jsp/TipoRecurso";

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /* TODO output your page here
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet GestionarTipos_de_Recursos</title>");  
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet GestionarTipos_de_Recursos at " + request.getContextPath () + "</h1>");
            out.println("</body>");
            out.println("</html>");
             */
        } finally {
            out.close();
        }
    }

    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doPost(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String accion = request.getParameter("hacer");
        request.setAttribute("modulo", "Tipos de Recursos");
        try {
            if (accion.equals("Agregar")) {
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/AgregarSubtipo.jsp");
                dispatcher.forward(request, response);
            }
            if (accion.equals("crear")) {
                this.AgregarSubtipo(request, response);
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarSubtipos.jsp");
                dispatcher.forward(request, response);
            }
            if (accion.equals("Listar")) {
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarSubtipos.jsp");
                dispatcher.forward(request, response);
            }
            if (accion.equals("Modificar")) {
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarModificarSubtipo.jsp");
                dispatcher.forward(request, response);
            }
            if (accion.equals("Borrar")) {
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarBorrarSubtipo.jsp");
                dispatcher.forward(request, response);
            }
            if (accion.equals("opModificar")) {
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ModificarSubtipo.jsp");
                dispatcher.forward(request, response);
            }
            if (accion.equals("Ver")) {
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/VerSubtipo.jsp");
                dispatcher.forward(request, response);
            }
            if (accion.equals("modificacion")) {
                this.ModificarSubtipo(request, response);
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarModificarSubtipo.jsp");
                dispatcher.forward(request, response);
            }
            if (accion.equals("opBorrar")) {
                if (this.BorrarSubtipo(request, response)) {
                    RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarBorrarSubtipo.jsp");
                    dispatcher.forward(request, response);
                } else {
                    request.setAttribute("Error", "El Tipo de Recurso no puede ser Borrado, debido ha que existen recursos de este tipo");
                    RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarBorrarSubtipo.jsp");
                    dispatcher.forward(request, response);
                }
            }
            if (accion.equals("opBorrarAtributo")) {
                if (this.BorrarAtributo(request, response)) {
                    RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/GestionarAtributos.jsp");
                    dispatcher.forward(request, response);
                } else {
                    request.setAttribute("Error", "El Atributo no puede ser Borrado, debido ha que existen Tipos de recurso que utilizan este atributo");
                    RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/GestionarAtributos.jsp");
                    dispatcher.forward(request, response);
                }
            }
            if (accion.equals("opAgregarAtributo")) {
                if (this.AgregarAtributo(request, response)) {
                    RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/GestionarAtributos.jsp");
                    dispatcher.forward(request, response);
                } else {
                    request.setAttribute("Error", "El Atributo no puede ser Agregado, posiblemente ya existe..");
                    RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/GestionarAtributos.jsp");
                    dispatcher.forward(request, response);
                }
            }
            if (accion.equals("Gestionar_Atributos")) {
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/GestionarAtributos.jsp");
                dispatcher.forward(request, response);
            }
        } catch (Exception ex) {
            try {
                GestionarUsuarios.sendErrorRedirect(request, response, "jsp/errores/errorGenerico.jsp", ex);
            } catch (Exception e) {
                e.printStackTrace();
            }

        }

    }
    /**
     * Agregar un nuevo subtipo de recurso, consiguiendo los datos del request.
     * Los datos que debe enviar el formulario son: El nombre del subtipo, los atributos que tiene el subtipo
     * @param request
     * @param response
     * @throws javax.servlet.ServletException
     * @throws java.io.IOException
     */
    protected void AgregarSubtipo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            //Primero agrego una fila a la tabla Tipos_recurso
            Tipo_recurso tipito = new Tipo_recurso();
            tipito.setNombre(request.getParameter("nombreSubtipo"));
            String descripcion=request.getParameter("descripcion");
            tipito.setDescripcion(descripcion);


            Vector atributos = new Vector();
            HttpSession session = request.getSession(false);
            if (session != null) {
                Connection cone;
                cone = (Connection) session.getAttribute("conexion");
                if (cone != null) {
                    ManejadorAtributos manejadorAtribu = new ManejadorAtributos(cone);
                    Atributos_recursos[] atribu = manejadorAtribu.BuscarTodosAtributos();
                    for (int i = 0; i < atribu.length; i++) {
                        if (Boolean.parseBoolean(request.getParameter(atribu[i].getNombre()))) {
                            atributos.add(atribu[i]);
                        }
                    }
                    ManejadorSubtiposRecursos manejadorTipo = new ManejadorSubtiposRecursos(cone);
                    manejadorTipo.AgregarSubtipo(tipito, atributos);
                    
                }
            }
        } catch (Tipo_tiene_atributosException ex) {
            ex.printStackTrace();
        } catch (Atributos_recursosException ex) {
            ex.printStackTrace();
       
        } 
    }
    /**
     * Borra un subtipo de forma fisica si es que no existen otros modulos que dependan del mismo.
     * @param request Contiene el id del subtipo que se desea borrar.
     * @param response
     * @return Retorna TRUE si es que se pudo borrar o FALSE en caso contrario.
     * @throws javax.servlet.ServletException
     * @throws java.io.IOException
     */
    protected boolean BorrarSubtipo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            int idTipo = Integer.parseInt(request.getParameter("id"));
            HttpSession session = request.getSession(false);            
            if (session != null) {
                Connection cone;
                cone = (Connection) session.getAttribute("conexion");
                if (cone != null) {
                    ManejadorSubtiposRecursos manejadorRol = new  ManejadorSubtiposRecursos(cone);
                    manejadorRol.BorrarTipo(idTipo);
                    return true;
                }
            }
            return false;
        } catch (Tipo_recursoException ex) {
            return false; 
        } 
    }
    /**
     * Borra un atributo de forma fisica que no tenga modulos que dependan de el, en caso de que haya el atributo no sera borrado.
     * @param request Contiene el id del atributo que se desea borrar.
     * @param response
     * @return
     * @throws javax.servlet.ServletException
     * @throws java.io.IOException
     */
    protected boolean BorrarAtributo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            int idAtributo = Integer.parseInt(request.getParameter("id"));
            HttpSession session = request.getSession(false);            
            if (session != null) {
                Connection cone;
                cone = (Connection) session.getAttribute("conexion");
                if (cone != null) {
                    ManejadorAtributos manejador = new  ManejadorAtributos(cone);
                    manejador.BorrarAtributo(idAtributo);
                    return true;
                }
            }
            return false;
        } catch (Atributos_recursosException ex) {
            return false;
        } 
    }
    /**
     * Obtiene del formulario los datos y agrega un nuevo atributo  que puede ser utilizado luego por el modulo de tipo de recurso.
     * @param request Contien los datos necesario para el agregado del atributo.
     * @param response
     * @return Retorna TRUE si se pudo borrar el atributo y FALSE en caso contrario, donde de seguro hay modulos que dependen de el.
     * @throws javax.servlet.ServletException
     * @throws java.io.IOException
     */
    protected boolean AgregarAtributo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            Atributos_recursos atributo=new Atributos_recursos();
            atributo.setNombre(request.getParameter("nombreAtributo"));
            atributo.setDescripcion(request.getParameter("descripcion"));
            
            HttpSession session = request.getSession(false);            
            if (session != null) {
                Connection cone;
                cone = (Connection) session.getAttribute("conexion");
                if (cone != null) {
                    ManejadorAtributos manejador = new  ManejadorAtributos(cone);
                    manejador.AgregarAtributos(atributo);
                    return true;
                }
            }
            return false;
        } catch (Atributos_recursosException ex) {
            return false;
        } 
    }
    /**
     * Obtiene los datos del formulario para modificar un tipo de recurso movil existente.
     * @param request Contien el id del usuario que se desea modificar y sus nuevos datos.
     * @param response
     * @throws javax.servlet.ServletException
     * @throws java.io.IOException
     * @throws com.akcess.exception.Tipo_recursoException
     */
    protected void ModificarSubtipo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, Tipo_recursoException {
        try {
            int idTipo = Integer.parseInt(request.getParameter("id"));
            String nombre=request.getParameter("nombreSubtipo");
            String descripcion=request.getParameter("descripcion");
            
            Tipo_recurso nuevoTipo= new Tipo_recurso();
            nuevoTipo.setId_tipo_recurso(idTipo);
            nuevoTipo.setNombre(nombre);
            nuevoTipo.setDescripcion(descripcion);
            Vector atributos = new Vector();
            
            HttpSession session = request.getSession(false);            
            if (session != null) {
                Connection cone;
                cone = (Connection) session.getAttribute("conexion");
                if (cone != null) {
                    ManejadorAtributos manejadorAtribu = new ManejadorAtributos(cone);
                    Atributos_recursos[] atribu = manejadorAtribu.BuscarTodosAtributos();
                    for (int i = 0; i < atribu.length; i++) {
                        if (Boolean.parseBoolean(request.getParameter(atribu[i].getNombre()))) {
                            atributos.add(atribu[i]);
                        }
                    }
                    ManejadorSubtiposRecursos manejadorTipo = new ManejadorSubtiposRecursos(cone);
                    
                    manejadorTipo.ModificarTipo(nuevoTipo);
                    manejadorTipo.ModificarAtributos(idTipo, atributos);
                                        
                }
            }
        } catch (Atributos_recursosException ex) {
            ex.printStackTrace();
        } catch (Tipo_tiene_atributosException ex) {
            ex.printStackTrace();
        } 
    }
    /** 
     * Returns a short description of the servlet.
     */
    public String getServletInfo() {
        return "Short description";
    }
    // </editor-fold>
}


